#include "Sql_list.h"

//创建表

void Init_Sql_List(Sql_list *L)
{
    L->len = 0;

}

//尾插

void tail_insert_list(Sql_list *L ,Element_data data)
{
    //安全判断
    if(NULL == L)
    {
        printf("表为空\n");
        return;
    }
    if(MAX_SIZE<= L->len)
    {
        printf("表数据已满\n");
        return;
    }

    //插入
    L->data[L->len] = data;
    //迭代
    L->len++;

}

//尾删
void taid_del_list(Sql_list *L)
{
    if(NULL == L )
    {
        printf("表为空\n");
        return;
    }
    if(0 >= L->len)
    {
        printf("表内无数据\n");
        return ;
    }
    L->len--;
}

//任意位置插入
void pos_insert_list(Sql_list *L,int index ,Element_data data)
{
    if(NULL == L)
    {
        printf("表为空\n");
        return ;
    }
    if(MAX_SIZE <= L->len)
    {
        printf("表已满\n");
        return ;        
    }

        //遍历判断i等于长度且大于输入的位置之后i--
    for (int i = L->len; i > index; i--)
    {
        //第i-1的数据等于第i的数据
        L->data[i]=L->data[i-1];
       
        //而第i-1的数据等于输入的数据
        L->data[i-1]=data;
    }
    //加入数据之后要添加长度否则会少最后一个数据
    L->len++;

}

//任意位置删除
void pos_det_list(Sql_list *L,int index)
{
    if(NULL == L)
    {
        printf("表已空\n");
        return ;
    }
    if(0>=L->len)
    {
        printf("表内无数据\n");
        return ;
    }
    if(index > L->len)
    {
        printf("输入参数不合法\n");
        return ;
    }
   for ( int i =index ; i <=L->len; i++)
   {   
       L->data[i] = L->data[i+1];
   }
   L->len--;
}

//判空
int IsEmpty_Sql_List(Sql_list *L)
{
    if(NULL == L)
    {
        printf("表为NULL");
        return 0;
    }
    if(0 >=L->len)
    {
        printf("表内为空");
        return 0;
    }
    printf("表内不为空");
    return 1;
}

//遍历打印
void printf_Sql_List(Sql_list *L)
{
    if(NULL == L)
    {
        printf("表为空\n");
        return ;
    }
    if(0 == L->len)
    {
        printf("表内无数据");
        return ;
    }

    for (size_t i = 0; i < L->len; i++)
    {
        printf("姓名:%s 性别:%s 年龄:%d 成绩:%d 学号:%d\n",L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].sco,L->data[i].id);
    }
}

//清空
void Clear_Sql_List(Sql_list *L)
{
    if(NULL == L)
    {
        printf("表为空");
        return;
    }
    L->len = 0;
}

//合并
Sql_list  Merge_Sql_Lists(Sql_list *L1,Sql_list *L2)
{
    Sql_list L3;
    Init_Sql_List(&L3);
    if(NULL == L1 || NULL == L2)
    {
        printf("表为空\n");
        return L3;
    }
    if(MAX_SIZE < L1->len + L2->len)
    {
        printf("有越界的风险\n");
        return L3;
    }
    if(0 == L2->len)
    {
        printf("L2中 无数据\n");
        return L3;
    }
    
    //第一种扩容方式
    for (size_t i = L1->len , j = 0; j < L2->len; i++ , j++)
    {
        L1->data[i] = L2->data[j];
        L1->len++;
    }
    
    //第二种扩容方式
    //for (size_t i = 0; i < L2->len; i++)
    //{
    //    tail_insert_list(L1,L2->data[i]);
    //}
    

    //第三种扩容方式
    //for (size_t i = 0; i < L1->len; i++)
    //{
    //    tail_insert_list(&L3,L1->data[i]);
    //}
    //for (size_t i = 0; i < L2->len; i++)
    //{
    //    tail_insert_list(&L3,L2->data[i]);
    //}
    
    //return L3;
}   

//查找
int find_by_name(Sql_list *L, char *name)
{
    if(NULL == L)
    {
        printf("顺序表内无数据\n");
        return 0;
    }
    if(0== L->len)
    {
        printf("顺序表内无数据\n");
        return 0;
    }
    //第一种方式
   // for (size_t i = 0; i < L->len; i++)
   // {
   //     if(0 == strcmp(L->data[i].name,name))
   //     {
   //         printf("找到了index=%ld, 姓名:%s 性别:%s 年龄:%d 学号:%d 成绩:%d\n",i+1,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].id,L->data[i].sco);
   //         return i;
   //     }
   // }
   // printf("没找到\n");

    //第二种方式
    printf("请输入你需要查找的名字\n");
    char buf[128];
    scanf("%s",buf);
    for (size_t i = 0; i < L->len; i++)
    {
        if(0 == strcmp(L->data[i].name,buf))
        {
            printf("找到了index=%ld, 姓名:%s 性别:%s 年龄:%d 学号:%d 成绩:%d\n",i+1,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].id,L->data[i].sco);
            return i;
        }
    }
    printf("没找到\n");
    return EOF;
}